package com.nf.health.app.utils;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Jason on 2016/5/25.
 */
public class ByteUtils {
    /**
     * 截取集合
     * @param detailData 集合
     * @param start 开始位置
     * @param end 结束位置
     * @return
     */
    public  static byte[] subStartEndByte(byte[] detailData, int start, int end) {
        if (detailData == null || end > detailData.length || start >= end) {
            return null;
        }
        byte b[] = new byte[end - start];
        for (int i = start; i < end; i++) {
            b[i - start] = detailData[i];
        }
        return b;
    }
    /**
     * 截取集合,从开始位置,到结束的长度
     * @param detailData 集合
     * @param start 开始位置
     * @return
     */
    public  static byte[] subStartByte(byte[] detailData, int start) {
        if (detailData == null || start >= detailData.length) {
            return null;
        }
        byte b[] = new byte[detailData.length - start];
        for (int i = start; i < detailData.length; i++) {
            b[i - start] = detailData[i];
        }
        return b;
    }
    /**
     * 数组累加求和
     */
    public  static float getByteTotle(byte[] detailData) {
        float f = 0f;
        for(int i = 0; i < detailData.length; i++){
            String ss = String.valueOf(detailData[i]);
            f += Integer.parseInt(ss, 16);
        }
        return f;
    }

    /**
     * 集合数组累加求和
     */
    public  static float getListByteTotle(List<byte[]> list) {
        float f = 0f;
        for(int i = 0; i < list.size(); i++){
            float ss = getByteTotle(list.get(i));
            f += ss;
        }
        return f;
    }
    /**
     * 集合数组累加求和
     */
    public  static float getListAllByteTotle(List<byte[]> list) {
        float b = 0;
        for(int i = 0; i < list.size(); i++){
            byte[] totle  = list.get(i);
            for(int j = 0; j < totle.length; j++){
                b += totle[j];
            }
        }
        return b;
    }
    /**
     * 对于集合显示最后一个的数组,截取最后一个
     */
    public  static ArrayList<byte[]> updateSubLkastListByte(ArrayList<byte[]> list) {
        for(int i = 0; i < list.size(); i++){
             if(i == (list.size() -1)){
                 list.set(list.size() - 1, subStartEndByte(list.get(i),0,list.get(i).length - 1));
             }
        }
        return list;
    }
    /**
     * 对于集合显示最后一个的数组,截取最后一个
     * 倒叙排列提高效率
     */
    public  static ArrayList<byte[]> updateSubLkastListByte2(ArrayList<byte[]> list) {
        for(int i=list.size(); i > 0; i--){
             if(i == (list.size() -1)){
                 list.set(list.size() - 1, subStartEndByte(list.get(i),0,list.get(i).length - 1));
                 break;
             }
        }
        return list;
    }
    /**
     * 取集合的第几位数组
     * @param list
     * @param index
     * @return
     */
    public static byte getByteFromListBytes(ArrayList<byte[]> list,int index){
        byte result = 0;
        if(list == null){
            return result;
        }
        int i = 0;
        for(int j = 0 ; j < list.size(); j++){
            byte[] totle  = list.get(j);
            for(int m = 0; m < totle.length; m++){
                i++;
                if(i==index){
                    result =  totle[m];
                    break;
                }
            }
        }
        return result;
    }
    /**
     * 获取集合中最大值
     *
     * @param yValues
     */
    public static float getMaxFromList(ArrayList<String> yValues) {
        float max = 0;
        for (String value : yValues) {
            max = max > Float.valueOf(value) ? max : Float.valueOf(value);
        }
        return max;
    }
}
